package com.study.services;
import java.util.ArrayList;
import java.util.List;

import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.study.model.jdao.IUserDAO;
import com.study.model.mdao.DeptMAO;
import com.study.model.pojo.Dept;
import com.study.model.pojo.User;

@Service
@Transactional(rollbackOn = Exception.class)
public class DeptService {
	
	@Autowired
	DeptMAO deptDAO;
	/**
	 * 查询所有部门
	 * @return 
	 */
	public List<JSONObject> getFindDeptAll(){
		return deptDAO.selectDeptAll();
	}
	
	public List<Dept> getFindDeptAllse(){
		return deptDAO.selectDeptAllse();
	}
	
	public JSONArray getFindDeptUserAll(){
		//需要格式[{},{}]
		//查询所有用户部门信息
		List<JSONObject> select= deptDAO.selectDeptUserAll();
		//用于存储部门用户数据
		JSONArray array=new JSONArray();
		for (JSONObject jsonObject : select) {
			//用于存储json数组内的数据
			JSONObject object=new JSONObject();	
			//循环遍历所有部门
			for (int i = 0; i < deptDAO.selectDeptAll().size(); i++) {
				//用于存储
				JSONArray jsonArray=new JSONArray();				
				if (deptDAO.selectDeptAll().get(i).getString("dep_name").equals(jsonObject.getString("dep_name"))) {
					System.out.println(deptDAO.selectDeptAll().get(i).getString("dep_name")+"  部门          "+jsonObject.getString("dep_name"));
					JSONObject object2=new JSONObject();
					object2.put("arslsl", deptDAO.selectDeptUserAll().get(i));
					object2.put("dep_name",deptDAO.selectDeptUserAll().get(i).getString("use_name"));
					jsonArray.add(object2);				
					object.put("arslsl", jsonArray);
					object.put("dep_name", deptDAO.selectDeptUserAll().get(i).getString("dep_name"));
				}
			}
			array.add(object);
		}
		for (int i = 0; i < array.size(); i++) {
			System.out.println(array.get(i));
		}
		return array;
	}
	
	
	
	public void getfindse() {
		//需要格式[{},{}]
				//查询所有用户部门信息
				List<JSONObject> select= deptDAO.selectDeptUserAll();
				//用于存储部门用户数据
				JSONArray array=new JSONArray();				
				for (int j = 0; j < deptDAO.selectDeptAll().size(); j++) {
					//用于存储json数组内的数据
					JSONObject object=new JSONObject();	
					//用于存储
					JSONArray jsonArray=new JSONArray();
				for (int i = 0; i < select.size(); i++) {										
					if(deptDAO.selectDeptAll().get(j).getString("dep_name").equals(select.get(i).getString("dep_name"))) {
						//用于保存部门内用户
						JSONObject object2=new JSONObject();
						System.out.println(deptDAO.selectDeptAll().get(i).getString("dep_name")+"  部门          "+select.get(i).getString("dep_name"));
						object2.put("arslsl", deptDAO.selectDeptUserAll().get(i));
						object2.put("dep_name",deptDAO.selectDeptUserAll().get(i).getString("use_name"));
						jsonArray.add(object2);	
					}
				}
					object.put("arslsl", jsonArray);
					object.put("dep_name", deptDAO.selectDeptUserAll().get(j).getString("dep_name"));
					array.add(object);
				
					for (int x = 0; x < array.size(); x++) {
						System.out.println(array.get(x));
					}
				}
	}
	
	public JSONArray getfindDept() {		
		//用于存储部门用户数据
		JSONArray array=new JSONArray();
		//查询所有部门
		 List<JSONObject> selectDept = deptDAO.selectDeptAll();	
		for (int i = 0; i < selectDept.size(); i++) {
			 JSONObject json=new JSONObject();
			/* if(selectDept.get(i).getInteger("dep_id")==7) {
				
			 }*/
			//一级部门
				json.put("dep_name", selectDept.get(i).getString("dep_name"));
			//获取该部门的子级部门
			List<JSONObject> seleDeptSuperId = deptDAO.seleDeptSuperId(selectDept.get(i).getInteger("dep_id"));			
			if(seleDeptSuperId.size()<=0) {
				
			}else {
				json.put("arslsl", getFindUsersDeptId(selectDept.get(i).getIntValue("dep_id")));
				JSONArray arrayse=new JSONArray();
				JSONObject jsobje=new JSONObject();
				for (JSONObject object : seleDeptSuperId) {
					jsobje.put("dep_name", object.getString("dep_name"));
				}
				jsobje.put("arslsl", getFindUsersDeptId(selectDept.get(i).getIntValue("dep_superid")));
				arrayse.add(jsobje);
				array.add(arrayse);
			}
			array.add(json);
		}		
			System.out.println(array.toString()+"                         xxmmxxmxmxmxmxx");
			return array;
	}
	
	/*
	public JSONArray getFindTreeDept() {
		//查询所有用户部门信息
		List<JSONObject> select= deptDAO.selectDeptAll();
		JSONArray jArray = new JSONArray();
		for (JSONObject jsonObject : select) {
			if(jsonObject.getInteger("dep_superid")==0) {
				//拿到一级类别
				JSONObject onelv=new JSONObject();
				onelv.put("dep_name", jsonObject.getString("dep_name"));
				JSONArray children = new JSONArray();
				//获取当前一级类别的id  
				int onesid=jsonObject.getInteger("dep_id");

				System.out.println(onesid+"               oneseid");
				for (JSONObject twosgive : select) {
					if(twosgive.getInteger("dep_superid")==onesid) {
						//获取二级类别
						System.out.println(twosgive+"            twosgive");
						JSONObject twolv=new JSONObject();
						twolv.put("dep_name", twosgive.getString("dep_name"));
						System.out.println(twosgive.getString("dep_name")+"            twosgive.getString(\"dep_name\")");
						//获取二级id
						int twosid=twosgive.getInteger("dep_id");
						JSONArray thrrensefs = new JSONArray();
						for (JSONObject threegive : select) {
							if(threegive.getInteger("dep_superid")==twosid) {
								JSONObject threelv=new JSONObject();
								threelv.put("dep_name", threegive.getString("dep_name"));
								threelv.put("dep_name", threelv);
								thrrensefs.add(threelv);
							}
							twolv.put("arslsl", thrrensefs);
						}
						//获取部门下的员工信息
						 List<JSONObject> selectUserDeptid = deptDAO.selectUserDeptid(twosid);
						 JSONArray threesarray = new JSONArray();
						 for (JSONObject threes : selectUserDeptid) {
							 JSONObject threeobj = new JSONObject();
							 System.out.println(threes+"                    threes");
							 threeobj.put("dep_name", threes.getString("use_name"));
							 threeobj.put("arslsl", threes);
							// if(threes.getIn)
							 threesarray.add(threeobj);
						}
						 twolv.put("arslsl", threesarray);
							children.add(twolv);
					}
				}
				onelv.put("arslsl", children);
				
				//放入大集合中
				jArray.add(onelv);
				System.out.println("sdjsfsd;fks;dfk;dsfksd;    "+jArray);
			}
		}
		System.out.println(jArray.toString());
		return jArray;
	}
	*/
	
	
	

	public JSONArray getFindTreeDept() {
		//查询所有用户部门信息
		List<JSONObject> select= deptDAO.selectDeptAll();
		JSONArray jArray = new JSONArray();
		for (JSONObject jsonObject : select) {
			if(jsonObject.getInteger("dep_superid")==0) {
				//拿到一级类别
				JSONObject onelv=new JSONObject();
				onelv.put("dep_name", jsonObject.getString("dep_name"));
				JSONArray children = new JSONArray();
				//获取当前一级类别的id  
				int onesid=jsonObject.getInteger("dep_id");
				System.out.println(onesid+"               oneseid");
				JSONArray findUsersDeptId = getFindUsersDeptId(onesid);
				if(findUsersDeptId.size()>0) {
					for (int i = 0; i < findUsersDeptId.size(); i++) {
						//存储boss信息
						children.add(findUsersDeptId.getJSONObject(0));
					}
				}
				//JSONObject jsonObject2 = findUsersDeptId.getJSONObject(0);				
			
				for (JSONObject twosgive : select) {
					if(twosgive.getInteger("dep_superid")==onesid) {					
						JSONObject twolv=new JSONObject();
						twolv.put("dep_name", twosgive.getString("dep_name"));					
						//获取二级id
						int twosid=twosgive.getInteger("dep_id");					
						//存储三级
						JSONArray thrrensefs = new JSONArray();
						for (JSONObject threegive : select) {
							if(threegive.getInteger("dep_superid")==twosid) {
								JSONObject threelv=new JSONObject();
								JSONArray jsonfour=new JSONArray();
								threelv.put("dep_name", threegive.getString("dep_name"));								
								//获取三级部门id
								int three=threegive.getInteger("dep_id");	
								//获取三级部门下的员工信息
								JSONArray findUsersfour= getFindUsersDeptId(three);
								JSONObject jsonObjthree = findUsersDeptId.getJSONObject(0);	
								if(findUsersfour.size()>0) {
									for (int i = 0; i < findUsersfour.size(); i++) {
										jsonfour.add(findUsersfour.get(i));
									}
								}								
								threelv.put("arslsl", jsonfour);
								thrrensefs.add(threelv);
							}							
						}
						JSONArray findUsersthree= getFindUsersDeptId(twosid);
						JSONObject jsonObjthree = findUsersDeptId.getJSONObject(0);	
						if(findUsersthree.size()>0) {
							for (int i = 0; i < findUsersthree.size(); i++) {
								thrrensefs.add(findUsersthree.get(i));
							}
						}
						System.out.println(thrrensefs+"               thrrensefs");						
						twolv.put("arslsl", thrrensefs);
						children.add(twolv);
					}
				}
				onelv.put("arslsl", children);
				//放入大集合中
				jArray.add(onelv);
				System.out.println("sdjsfsd;fks;dfk;dsfksd;    "+jArray);
			}
		}
		System.out.println(jArray.toString());
		return jArray;
	}
	
	/**
	 * 要求：以及员工应与二级部门同级
	 * 二级部门下可能有三级部门，如果有三级部门则二级部门下的员工应与三级部门同级-
	 * @return 
	 */
	public JSONArray getFindDeptse() {
	
		
		
		//存储树形结构
		JSONArray jsonarr=new JSONArray();	
		//查询所有部门
		List<JSONObject> select= deptDAO.selectDeptAll();
		//遍历部门获取部门名称
		for (JSONObject jsonObject : select) {
			//获取一级部门即公司
			if(jsonObject.getInteger("dep_superid")==0) {
				//拿到一级类别
				JSONObject onedept=new JSONObject();
				JSONArray childone = new JSONArray();
				onedept.put("dep_name", jsonObject.getString("dep_name"));
				//获取当前一级类别的id  
				int onesid=jsonObject.getInteger("dep_id");
				//获取公司boss信息
				 List<JSONObject> selectUserDeptid = deptDAO.selectUserDeptid(onesid);
				//获取boss信息并且与部门同级
				 for (JSONObject jsonboss: selectUserDeptid) {
					 JSONObject  jsonbosse=new JSONObject();
					 jsonbosse.put("dep_name", jsonboss.getString("use_name"));
					 jsonbosse.put("arslsl", jsonboss);
					 childone.add(jsonbosse);
				}
				for (JSONObject jsonObject2 : select) {
					//获取二级类别  销售部
					if(jsonObject.getInteger("dep_superid")==onesid) {
						JSONObject twodept=new JSONObject();
						JSONArray childtwo = new JSONArray();
						onedept.put("dep_name", jsonObject2.getString("dep_name"));
						//获取当前二级类别的id  
						int twosid=jsonObject.getInteger("dep_id");
						//获取二级类别下的员工信息
						 List<JSONObject> twosidUserDeptid = deptDAO.selectUserDeptid(twosid);
						 JSONObject twodeptse=new JSONObject();
						//获取boss信息并且与部门同级
						 for (JSONObject jsonboss: twosidUserDeptid) {
							 JSONObject  jsonbosse=new JSONObject();
							 jsonbosse.put("dep_name", jsonboss.getString("use_name"));
							 jsonbosse.put("arslsl", jsonboss);
							 childtwo.add(jsonbosse);
						}
						 
						for (JSONObject jsonObject3 : select) {
							//获取三级类别   销售一部
							if(jsonObject.getInteger("dep_superid")==twosid) {
								//获取当前三级类别的id  销售一部
								int threesid=jsonObject.getInteger("dep_id");
								//获取三级类别下的员工信息
								 List<JSONObject> selectthreeuser = deptDAO.selectUserDeptid(threesid);
								 JSONObject threedept=new JSONObject();
									JSONArray childthree= new JSONArray();
								 for (JSONObject jsonboss: selectthreeuser) {
									 JSONObject  jsonbosse=new JSONObject();
									 threedept.put("dep_name", jsonboss.getString("use_name"));
									 threedept.put("arslsl", jsonboss);
									 childthree.add(jsonbosse);
								}
								 childtwo.add(childthree);
						    }				
					   }
						twodept.put("arslsl", childtwo);	
						childone.add(twodept);
					}
				}
				onedept.put("arslsl",childone);
				jsonarr.add(onedept);
			}
	   }
		System.out.println(jsonarr+"                         jsonarr");
		return jsonarr;
	}
	
	
	
	/**
	 * 通过部门id获取部门中的员工
	 * @return 
	 */
	public JSONArray getFindUsersDeptId(int deptid) {		
		//存储部门中的用户信息
		JSONArray jsonarr=new JSONArray();	
		
		List<JSONObject> selectUserDeptid = deptDAO.selectUserDeptid(deptid);
		for (JSONObject jsonObject : selectUserDeptid) {
			JSONObject obj=new JSONObject();
			obj.put("arslsl", jsonObject);
			obj.put("dep_name", jsonObject.getString("use_name"));
			jsonarr.add(obj);
		}
		return jsonarr;
	}
	
	
	
	
	
	
	
	
	
	/**
	 * 修改部门
	 * @param dept
	 * @return
	 */
	public int setUpdateDept(String deptname,int deptid){
		int xm=0;
		if (deptDAO.selectDeptName(deptname).size()==0) {
			xm=deptDAO.updateDept(deptname,deptid);
		}else{
			System.out.println("存在相同部门，不能修改");
		}
		return xm;
	}
	
	/**
	 * 删除部门
	 * @param depid
	 * @return
	 */
	public int setDelectDept(int depid){
		return deptDAO.deleteDept(depid);
	}
	
	/**
	 * 新增部门
	 * @param deptname
	 * @param depSuperid
	 * @return 
	 */
	public String setInsertDept2(Dept dept){
		String type="";
		if (deptDAO.selectDeptName(dept.getDepName()).size()<=0) {
			JSONObject findDeptse = deptDAO.getFindDeptse();
			dept.setDepId(Integer.parseInt(findDeptse.getString("dep_id"))+1);
			deptDAO.insertDept(dept);
			type="添加成功";
			
		}else{
			System.out.println("存在相同部门不能添加该部门");
			type="存在相同部门不能添加该部门";
		}
		return type;
	}
	
	/**
	 * 根据部门名称查询部门
	 * @param deptname
	 * @return
	 */
	public List<JSONObject> findDeptNmae(String deptname) {
		return deptDAO.selectDeptName(deptname);
	}
	
	/**
	 * 根据部门名称查询对应的角色
	 * @param deptname
	 * @return
	 */
	public List<JSONObject> findDeptRoleNmae(String depname){
		return deptDAO.selectDeptRole(depname);
	}
	
	/**
	 * 根据父id查询部门
	 * @param i
	 * @return
	 */
	public List<JSONObject> findDeptByPar(int i) {
		 List<JSONObject> depts = deptDAO.selectByPar(i);
		 System.out.println(depts);
		 return depts;
	}
	
	/**
	 * 根据部门id查询对应的员工
	 * @param depid
	 * @return
	 */
	public List<JSONObject> findUserBydepid(String depid) {
		List<JSONObject> users = deptDAO.selectByDepid(depid);
		return users;
	}
	/**
	 * 实现部门和角色绑定
	 * @param deptid
	 * @param rolid
	 */
	public void setfundeptrole(String deptid,String rolid) {
		deptDAO.setRoleDept(deptid, rolid);
	}
	
	public List<JSONObject> getFindrole(String deptid) {
		return deptDAO.getfindDeptrole(deptid);
	}
	
	/**
	 * 实现用部门名称查询用户 
	 * @param depnane
	 * @return 
	 */
	public List<JSONObject> getfindDepets(String depnane) {
		return deptDAO.getfindDeptName(depnane);
	}
	
	/**
	 * 根据部门名称查询部门
	 * @param depnane
	 * @return
	 */
	public JSONObject selectDeptname(String depnane) {
		return deptDAO.selectdeptname(depnane);
	}
	
	/**
	 * 解除部门和角色的绑定
	 * @param perid
	 */ 
	public void delectDeptrole(int perid) {
		deptDAO.delectroleperst(perid);
	}
	
	/**
	 * 根据部门父级id查询部门
	 * @param supperid
	 * @return
	 */
	public List<JSONObject> getFindDeptSupperid(String supperid) {
		return deptDAO.findsupperdept(supperid);
	}
	
	/**
	 * 获取部门总数
	 * @return
	 */
	public int getfindDeptCount() {
		return deptDAO.seleDeptCount();
	}
}
